package Twice.day13;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author: lya
 * @Description: 本类的作用描述:
 * @CreateDate: 2019/8/6
 * @Version: 1.0
 */
@SuppressWarnings("all")
public class ProductDaoImpl implements IProductDao {
    //文件路径
    public static final String PATH = "src/Twice/day13/product.txt";

    @Override

    public List<Product> findAll() {
        //1.构建读取对象类型的文件的字节输入流
        ObjectInputStream in = null;

        List<Product> products = null;

        //确定源头
        try {
            in = new ObjectInputStream(new FileInputStream(PATH));
            //读取对象
            products = (List<Product>) in.readObject();

        } catch (IOException e) {//IO异常的总的父类
            //需要对处理的异常进行处理的.
            //e.printStackTrace();
            //未来的此处,可以进行日志操作 - 为了方便后面的维护
            //日志文件...
            return null;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if(null!=in){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return products;
    }

    /**
     * 表明:仅仅是支持一次性读和一次性写入
     * 只要分批次写入,永远读取出来的是第一次写入的内容
     * 所以 - 先读取[参数有效性判断] - 再加入新的product - 写出去[集合对象].
     * @param product
     */
    @Override

    public void save(Product product) {
        ObjectOutputStream out = null;

        try {
            //先读取..

            List<Product> products = findAll();
            //如果文件不存在 - 创建了一个文件. - 永远重新初始化文件
            out= new ObjectOutputStream(new FileOutputStream(PATH));


            //参数有效性判断
//            if(null != products){
//                //将新的加入的product对象添加到这个集合中
//                products.add(product);
//            }else{
//                //重新初始化
//                products = new ArrayList<>();
//                products.add(product)
//            }

            //改造
            if(null == products)
                products = new ArrayList<>();

            products.add(product);

            //写入...
            out.writeObject(products);

        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(null!=out){
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    @Override
    public void saveList(List<Product> products) {

    }

    @Override
    public void delByrand(String brand) {

    }
}
